001 /* 002 * Copyright 2005 Stephen J. McConnell 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.library; 020 021 import java.io.File; 022 023 import net.dpml.library.info.Scope; 024 import net.dpml.library.info.ResourceDirective.Classifier; 025 026 import net.dpml.transit.Artifact; 027 028 import net.dpml.lang.Category; 029 import net.dpml.lang.Version; 030 031 import net.dpml.util.Resolver; 032 033 /** 034 * The Resource interface describes infomation about a published resource. 035 * 036 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 037 * @version 1.1.0 038 */ 039 public interface Resource extends Dictionary, Resolver 040 { 041 /** 042 * System property name used to declare the decimal versioning enabled flag. 043 */ 044 public static final String DECIMAL_VERSIONING_KEY = "project.decimal.versioning.enabled"; 045 046 /** 047 * Return the singleton library. 048 * @return the library 049 */ 050 Library getLibrary(); 051 052 /** 053 * Return the name of the resource. 054 * @return the resource name 055 */ 056 String getName(); 057 058 /** 059 * Return the resource version. 060 * @return the version 061 */ 062 String getVersion(); 063 064 /** 065 * Return the statutory resource version. 066 * @return the version 067 */ 068 String getStatutoryVersion(); 069 070 /** 071 * Return the decimal version. 072 * @return the version 073 */ 074 Version getDecimalVersion(); 075 076 /** 077 * Return the fully qualified path to the resource. 078 * @return the path 079 */ 080 String getResourcePath(); 081 082 /** 083 * Return the basedir for this resource. 084 * @return the base directory (possibly null) 085 */ 086 File getBaseDir(); 087 088 /** 089 * Return the info block. 090 * @return the info block 091 */ 092 Info getInfo(); 093 094 /** 095 * Return the resource classifier. 096 * @return the classifier (LOCAL, EXTERNAL or ANONYMOUS) 097 */ 098 Classifier getClassifier(); 099 100 /** 101 * Return the expanded array of types associated with the resource. 102 * The returned array is a function of the types declared by a resource 103 * expanded relative to any types implied by processor dependencies. 104 * @return the type array 105 */ 106 Type[] getTypes(); 107 108 /** 109 * Test if this resource is associated with a type of the supplied name. 110 * @param type the type id 111 * @return TRUE if this resource produces an artifact of the supplied type 112 */ 113 boolean isa( String type ); 114 115 /** 116 * Return a resource type relative to a supplied type id. 117 * @param id the type name to retrieve 118 * @return the type instance 119 */ 120 Type getType( String id ); 121 122 /** 123 * Construct an artifact for the supplied type. 124 * @param type the resource type id 125 * @return the artifact 126 */ 127 Artifact getArtifact( String type ); 128 129 /** 130 * Construct an unversion link artifact for the supplied type. 131 * @param type the resource type id 132 * @return the link artifact 133 */ 134 Artifact getLinkArtifact( String type ); 135 136 /** 137 * Return the enclosing parent module. 138 * @return the enclosing module of null if this a top-level module. 139 */ 140 Module getParent(); 141 142 /** 143 * Return an array of resource that are providers to this resource. 144 * @param scope the operational scope 145 * @param expand if true include transitive dependencies 146 * @param sort if true the array will sorted relative to dependencies 147 * @return the resource providers 148 */ 149 Resource[] getProviders( Scope scope, boolean expand, boolean sort ); 150 151 /** 152 * Return an array of resource that are providers to this resource. If 153 * the supplied scope is BUILD the returned resource array is equivalent 154 * <src>getProviders( Scope.BUILD, .. )</src>. If the scope is RUNTIME 155 * the returned resource array includes BUILD and RUNTIME resources. If 156 * the scope is TEST the returned array includes BUILD, RUNTIME and TEST 157 * resources. 158 * @param scope the scope of aggregation to be applied to the selection 159 * @param expand if TRUE include transitive dependencies 160 * @param sort if true the array will sorted relative to dependencies 161 * @return the resource providers 162 */ 163 Resource[] getAggregatedProviders( Scope scope, boolean expand, boolean sort ); 164 165 /** 166 * Return a sorted and filtered array of providers. Resources not declaring 167 * the "jar" type as a produced type are excluded from selection. The 168 * resource array will include transitive dependencies. The method is 169 * suitable for the construction of build and test phase classloaders. 170 * 171 * @param scope the aggregation scope 172 * @return the scoped resource chain 173 */ 174 Resource[] getClasspathProviders( Scope scope ); 175 176 /** 177 * Return an array of runtime providers filtered relative to a supplied 178 * classloading category. Resources not declaring the "jar" type as a 179 * produced type are excluded from selection. The resource array returned 180 * from this operation is a sorted transitive sequence excluding all 181 * resource references by any category higher than the supplied category. 182 * This method is typically used to construct information suitable for 183 * the gerneration of plugin metadata. 184 * 185 * @param category the classloader category 186 * @return the category scoped resource chain 187 */ 188 Resource[] getClasspathProviders( Category category ); 189 190 /** 191 * Return an array of resources that are consumers of this resource. 192 * @param expand if true the returned array includes consumers associated 193 * through transitive dependency relationships, otherwise the array is 194 * limited to direct consumers 195 * @param sort if true the array is sorted relative to depenency relationships 196 * @return the array of consumer projects 197 */ 198 Resource[] getConsumers( boolean expand, boolean sort ); 199 200 /** 201 * Return an array of filters associated with the resource. 202 * @return the array of filters 203 */ 204 Filter[] getFilters(); 205 206 /** 207 * Return a filename using the layout strategy employed by the cache. 208 * @param id the artifact type 209 * @return the filename 210 */ 211 String getLayoutPath( String id ); 212 213 /** 214 * Return the array of production data. 215 * @return the associated production data 216 */ 217 Data[] getData(); 218 }